package panels;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JSplitPane;
import javax.swing.JScrollPane;
import javax.swing.JList;

import dane.Logowanie;
import dane.Towar;
import dane.Utwory;
import dane.Zapytania;
import panels.EdytujTowar;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Color;

import javax.swing.ListSelectionModel;
import com.jgoodies.forms.factories.DefaultComponentFactory;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.JSeparator;
import javax.swing.ScrollPaneConstants;


/**
 * Program <code>Music Store</code>
 * Klasa <code>Konczace</code> tworząca okno z listą albumów z określoną ilością na magazynie.
 * @version 1.0 2013
 * @author Dorota Chyła, Tomasz Bednarski, Wojciech Florkowski, Łukasz Gąsiewicz
 */
public class Konczace extends JDialog implements ActionListener {
	
	/**
	 * @param args
	 */
	private final JPanel contentPanel = new JPanel();
	protected JPanel buttonPane;
	private JLabel lblNazwaAlbumu, lblGatunek, lblRokWydania, lblDost, lblCena, lblMuzyk,
				lblNazwaAlbumuW, lblGatunekW, lblRokWydaniaW, lblDostW, lblCenaW, lblMuzykW;
	private JSplitPane splitPane;
	private JButton okButton,jbEdytuj;
	private JList list;
	private JTextArea jTextAreaUtwory;
	private String[] labelComboBox={"Wyszukiwanie","po autorze","po nazwie albumu","po roku wydania","po nazwie utworu"};
	
	private Zapytania zap;
	private Logowanie log;
	
	private static Konczace unikalnaInstancja;
	private Towar tow;

	/**
	 * Konstruktor parametrowy tworzący okno JDialog
	 * @param sql zapytanie SQL
	 */
	protected Konczace(String sql) {
		log=Logowanie.pobierzLogowanie();
		zap=new Zapytania();
		
		setSize(800, 600);
		setTitle("Kończące się albumu.");
		
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		
		splitPane = new JSplitPane();
		splitPane.setOneTouchExpandable(true);
		splitPane.setBounds(10, 11, 764, 507);
		contentPanel.add(splitPane);
		
		Towar[] t=zap.getAllTowar(" WHERE ilosc_magazyn < "+sql);
		
		list = new JList();
		list.setVisibleRowCount(30);
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		list.setListData(t);
		list.setCellRenderer(new DisplayJListTow());
		
		list.addMouseListener(new MouseAdapter(){
			public void mouseClicked(MouseEvent e) {
				list_mouseClicked(e);
			}
		});
		
		JScrollPane scrollPane = new JScrollPane(list);
		splitPane.setLeftComponent(scrollPane);

		JPanel jpRight = new JPanel();
		splitPane.setRightComponent(jpRight);
		jpRight.setLayout(null);
		
		lblNazwaAlbumu = new JLabel("Nazwa albumu:");
		lblNazwaAlbumu.setForeground(Color.GRAY);
		lblNazwaAlbumu.setBackground(Color.GRAY);
		lblNazwaAlbumu.setHorizontalAlignment(SwingConstants.RIGHT);
		lblNazwaAlbumu.setBounds(49, 36, 100, 14);
		jpRight.add(lblNazwaAlbumu);
		
		lblRokWydania = new JLabel("Rok wydania:");
		lblRokWydania.setForeground(Color.GRAY);
		lblRokWydania.setHorizontalAlignment(SwingConstants.RIGHT);
		lblRokWydania.setBounds(49, 96, 100, 14);
		jpRight.add(lblRokWydania);
		
		lblGatunek = new JLabel("Gatunek:");
		lblGatunek.setForeground(Color.GRAY);
		lblGatunek.setHorizontalAlignment(SwingConstants.RIGHT);
		lblGatunek.setBounds(49, 126, 100, 14);
		jpRight.add(lblGatunek);
		
		lblDost = new JLabel("Dostępność:");
		lblDost.setForeground(Color.GRAY);
		lblDost.setHorizontalAlignment(SwingConstants.RIGHT);
		lblDost.setBounds(49, 156, 100, 14);
		jpRight.add(lblDost);
		
		lblCena = new JLabel("Cena:");
		lblCena.setForeground(Color.GRAY);
		lblCena.setHorizontalAlignment(SwingConstants.RIGHT);
		lblCena.setBounds(49, 186, 100, 14);
		jpRight.add(lblCena);
		
		lblNazwaAlbumuW = new JLabel("");
		lblNazwaAlbumuW.setHorizontalAlignment(SwingConstants.LEFT);
		lblNazwaAlbumuW.setBounds(159, 36, 200, 14);
		jpRight.add(lblNazwaAlbumuW);
		
		lblRokWydaniaW = new JLabel("");
		lblRokWydaniaW.setHorizontalAlignment(SwingConstants.LEFT);
		lblRokWydaniaW.setBounds(159, 96, 200, 14);
		jpRight.add(lblRokWydaniaW);
		
		lblGatunekW = new JLabel("");
		lblGatunekW.setHorizontalAlignment(SwingConstants.LEFT);
		lblGatunekW.setBounds(159, 126, 200, 14);
		jpRight.add(lblGatunekW);
		
		lblDostW = new JLabel("");
		lblDostW.setHorizontalAlignment(SwingConstants.LEFT);
		lblDostW.setBounds(159, 156, 200, 14);
		jpRight.add(lblDostW);
		
		lblCenaW = new JLabel("");
		lblCenaW.setHorizontalAlignment(SwingConstants.LEFT);
		lblCenaW.setBounds(159, 186, 200, 14);
		jpRight.add(lblCenaW);
		
		int x=0;
		
		lblMuzyk = new JLabel("Muzyk:");
		lblMuzyk.setHorizontalAlignment(SwingConstants.RIGHT);
		lblMuzyk.setForeground(Color.GRAY);
		lblMuzyk.setBounds(49, 66, 100, 14);
		jpRight.add(lblMuzyk);
		
		lblMuzykW = new JLabel("");
		lblMuzykW.setHorizontalAlignment(SwingConstants.LEFT);
		lblMuzykW.setBounds(159, 66, 200, 14);
		jpRight.add(lblMuzykW);
		
		jTextAreaUtwory = new JTextArea();
		jTextAreaUtwory.setForeground(Color.BLACK);
		jTextAreaUtwory.setLineWrap(true);
		jTextAreaUtwory.setEditable(false);
		jTextAreaUtwory.setBackground(UIManager.getColor("Panel.background"));
		JScrollPane sp1 = new JScrollPane(jTextAreaUtwory);
		sp1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		sp1.setBounds(10, 275, 620, 219);
		jpRight.add(sp1);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(10, 255, 620, 239);
		jpRight.add(separator);
		
		JLabel lblUtwory = DefaultComponentFactory.getInstance().createTitle("Utwory:");
		lblUtwory.setForeground(Color.GRAY);
		lblUtwory.setHorizontalAlignment(SwingConstants.CENTER);
		lblUtwory.setBounds(286, 260, 88, 14);
		jpRight.add(lblUtwory);
		
		JLabel lblDane = DefaultComponentFactory.getInstance().createTitle("Dane:");
		lblDane.setForeground(Color.GRAY);
		lblDane.setHorizontalAlignment(SwingConstants.CENTER);
		lblDane.setBounds(285, 11, 88, 14);
		jpRight.add(lblDane);
		
		
		
		////bottom
		buttonPane = new JPanel();
		buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
		getContentPane().add(buttonPane, BorderLayout.SOUTH);
		
		jbEdytuj = new JButton("Edytuj");
		jbEdytuj.addActionListener(this);
		buttonPane.add(jbEdytuj);
			
		okButton = new JButton("Wyjście");
		buttonPane.add(okButton);
		okButton.addActionListener(this);
	}
	
	/**
	 * Metoda udostępnia nam sposób stworzenia instancji obiektu klasy Konczace i zwraca go jako wynik działania tej metody
	 * @param sql
	 * @return
	 */
	public static Konczace pobierzInstancje(String sql){
		if(unikalnaInstancja == null){
			unikalnaInstancja=new Konczace(sql);
		}
		return unikalnaInstancja;
	}
	
	/**
	 * Metoda publiczna zmieniająca właściwości instancji
	 * @param sql zapytanie SQL
	 * @return
	 */
	public static Konczace zmienInstancje(String sql){
		unikalnaInstancja=new Konczace(sql);
		
		return unikalnaInstancja;
	}
	
	/**
	 * Publiczna metoda z interfejsu <code>ActionListener</code>
	 * obslugujaca zdarzenie akcji <code>ActionEvent</code>
	 */
	public void actionPerformed(ActionEvent e) {
		 Object source = e.getSource();
		 ////WYJSCIE
		 if(source == okButton){
			 setVisible(false);
		 }
		 else if(source == jbEdytuj){
			 try{
				 //EdytujProdukt2 ePro= new EdytujProdukt2(tow);
				 EdytujTowar ePro = new EdytujTowar(tow);
				 ePro.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				 //ePro.setEnabled(true);
				 
				 
				 ePro.pack(); /// ustawia wielkosc okna w zaleznosci od zawartosci
				 ePro.setLocationRelativeTo(null);
				 ePro.setModal(true);
				 
				 
				 ePro.setVisible(true);
				 
				 
			 }catch(Exception a){
				 System.err.println("Edycja nie działa");
			 }
		 }
			 
	}
	
	/**
	 * Publiczna metoda z interfejsu <code>mouseClicked</code>
	 * obslugujaca zdarzenie akcji <code>MouseEvent</code>
	 */
	public void list_mouseClicked(MouseEvent e){
		tow = (Towar) list.getSelectedValue();
		
		lblNazwaAlbumuW.setText(String.valueOf(tow.getNazwaAlbumu()));
		lblRokWydaniaW.setText(String.valueOf(tow.getRokWyd()));
		lblGatunekW.setText(String.valueOf(tow.getGatunek()));
		lblDostW.setText(String.valueOf(tow.getIloscMag()));
		lblCenaW.setText(String.valueOf(tow.getCenaMag()));
		lblMuzykW.setText(String.valueOf(tow.getZespol()));
		
		int x = Integer.valueOf(tow.getId());
		jTextAreaUtwory.setText("");
		Utwory[] ut = zap.getSelectMusic(x);
		for(int i=0;i<ut.length;i++){
			jTextAreaUtwory.append((i+1)+".  "+ut[i].getTytul()+",  ("+ut[i].getCzas().substring(0,5)+")\n");
		}
	}
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			Konczace dialog = Konczace.pobierzInstancje("10");
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			System.err.println("Sklep2: Błąd tworzenia GUI");
		}
	}
}
